Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


visualiser-wasm/internal/lod/lod.go f89f91e267d8079e6dec86fa9d3139ddbe7f64ce (f89f91e2) Text, 4.32 KB

T8b949e// SPDX-License-Identifier: 0BSD

T8b949e// Package lod computes level-of-detail property patches for vis-network nodes.
Tff7b72package Te6edf3lod

T8b949e// NodeIn is the minimal node state needed to compute an LOD patch.
Tff7b72type Te6edf3NodeIn Tff7b72struct Tb4b4b4{
Te6edf3ID Tffa657string Ta5d6ff`json:"id"`
Te6edf3Group Tffa657string Ta5d6ff`json:"group"`
Te6edf3Shape Tffa657string Ta5d6ff`json:"shape"`
Te6edf3Size Tffa657float64 Ta5d6ff`json:"size"`
Te6edf3OriginalShape Tffa657string Ta5d6ff`json:"_originalShape"`
Te6edf3OriginalSize Tffa657float64 Ta5d6ff`json:"_originalSize"`
Te6edf3Color Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Ta5d6ff`json:"color"`
Te6edf3Font Tff7b72*Te6edf3FontIn Ta5d6ff`json:"font"`
Tb4b4b4}

T8b949e// FontIn carries the current font size when present.
Tff7b72type Te6edf3FontIn Tff7b72struct Tb4b4b4{
Te6edf3Size Tff7b72*Tffa657float64 Ta5d6ff`json:"size"`
Tb4b4b4}

T8b949e// Update is a sparse vis-network node patch for one LOD change.
Tff7b72type Te6edf3Update Tff7b72struct Tb4b4b4{
Te6edf3ID Tffa657string Ta5d6ff`json:"id"`
Te6edf3Shape Tffa657string Ta5d6ff`json:"shape,omitempty"`
Te6edf3Size Tff7b72*Tffa657float64 Ta5d6ff`json:"size,omitempty"`
Te6edf3Font Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Ta5d6ff`json:"font,omitempty"`
Te6edf3Color Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Ta5d6ff`json:"color,omitempty"`
Tb4b4b4}

Tff7b72var Tb4b4b4(
Te6edf3fontSize0 Tb4b4b4= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"size"Tb4b4b4: T79c0ff0.0Tb4b4b4}
Te6edf3fontHighLight11 Tb4b4b4= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"size"Tb4b4b4: T79c0ff11.0Tb4b4b4, Ta5d6ff"color"Tb4b4b4: Ta5d6ff"#ffffff"Tb4b4b4}
Te6edf3fontHighDark11 Tb4b4b4= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"size"Tb4b4b4: T79c0ff11.0Tb4b4b4, Ta5d6ff"color"Tb4b4b4: Ta5d6ff"#000000"Tb4b4b4}
Te6edf3fontHighLight16 Tb4b4b4= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"size"Tb4b4b4: T79c0ff16.0Tb4b4b4, Ta5d6ff"color"Tb4b4b4: Ta5d6ff"#ffffff"Tb4b4b4}
Te6edf3fontHighDark16 Tb4b4b4= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"size"Tb4b4b4: T79c0ff16.0Tb4b4b4, Ta5d6ff"color"Tb4b4b4: Ta5d6ff"#000000"Tb4b4b4}
Te6edf3colorBlueLight Tb4b4b4= Te6edf3nodeColorTb4b4b4(Ta5d6ff"#3b82f6"Tb4b4b4, Ta5d6ff"#eff6ff"Tb4b4b4)
Te6edf3colorBlueDark Tb4b4b4= Te6edf3nodeColorTb4b4b4(Ta5d6ff"#3b82f6"Tb4b4b4, Ta5d6ff"#1e40af"Tb4b4b4)
Te6edf3size10 Tb4b4b4= T79c0ff10.0
Te6edf3size15 Tb4b4b4= T79c0ff15.0
Te6edf3size25 Tb4b4b4= T79c0ff25.0
Te6edf3size50 Tb4b4b4= T79c0ff50.0
Tb4b4b4)

T8b949e// LevelFromScale maps a vis-network camera scale to low/medium/high.
Tff7b72func Te6edf3LevelFromScaleTb4b4b4(Te6edf3scale Tffa657float64Tb4b4b4) Tffa657string Tb4b4b4{
Tff7b72if Te6edf3scale Tb4b4b4< T79c0ff0.2 Tb4b4b4{
Tff7b72return Ta5d6ff"low"
Tb4b4b4}
Tff7b72if Te6edf3scale Tb4b4b4< T79c0ff0.5 Tb4b4b4{
Tff7b72return Ta5d6ff"medium"
Tb4b4b4}
Tff7b72return Ta5d6ff"high"
Tb4b4b4}

T8b949e// ComputeUpdates returns only nodes whose LOD props actually change.
Tff7b72func Te6edf3ComputeUpdatesTb4b4b4(Te6edf3nodes Tb4b4b4[Tb4b4b4]Te6edf3NodeInTb4b4b4, Te6edf3level Tffa657stringTb4b4b4, Te6edf3darkMode Tffa657boolTb4b4b4) Tb4b4b4[Tb4b4b4]Te6edf3Update Tb4b4b4{
Tff7b72if Tffa657lenTb4b4b4(Te6edf3nodesTb4b4b4) Tff7b72== T79c0ff0 Tb4b4b4{
Tff7b72return Tff7b72nil
Tb4b4b4}
Te6edf3blue Tff7b72:= Te6edf3colorBlueLight
Tff7b72if Te6edf3darkMode Tb4b4b4{
Te6edf3blue Tb4b4b4= Te6edf3colorBlueDark
Tb4b4b4}
Te6edf3fontMe Tff7b72:= Te6edf3fontHighDark16
Te6edf3fontPeer Tff7b72:= Te6edf3fontHighDark11
Tff7b72if Te6edf3darkMode Tb4b4b4{
Te6edf3fontMe Tb4b4b4= Te6edf3fontHighLight16
Te6edf3fontPeer Tb4b4b4= Te6edf3fontHighLight11
Tb4b4b4}

Te6edf3out Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Te6edf3UpdateTb4b4b4, T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3nodesTb4b4b4)Tff7b72/T79c0ff4Tff7b72+T79c0ff1Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72:= Tff7b72range Te6edf3nodes Tb4b4b4{
Te6edf3n Tff7b72:= Tff7b72&Te6edf3nodesTb4b4b4[Te6edf3iTb4b4b4]
Te6edf3next Tff7b72:= Te6edf3propsForTb4b4b4(Te6edf3nTb4b4b4, Te6edf3levelTb4b4b4, Te6edf3fontMeTb4b4b4, Te6edf3fontPeerTb4b4b4, Te6edf3blueTb4b4b4)
Tff7b72if Tb4b4b4!Te6edf3changedTb4b4b4(Te6edf3nTb4b4b4, Te6edf3nextTb4b4b4) Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Te6edf3out Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3outTb4b4b4, Te6edf3nextTb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3out
Tb4b4b4}

Tff7b72func Te6edf3propsForTb4b4b4(Te6edf3n Tff7b72*Te6edf3NodeInTb4b4b4, Te6edf3level Tffa657stringTb4b4b4, Te6edf3fontMeTb4b4b4, Te6edf3fontPeerTb4b4b4, Te6edf3blue Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4) Te6edf3Update Tb4b4b4{
Te6edf3u Tff7b72:= Te6edf3UpdateTb4b4b4{Te6edf3IDTb4b4b4: Te6edf3nTb4b4b4.Te6edf3IDTb4b4b4}
Tff7b72switch Te6edf3level Tb4b4b4{
Tff7b72case Ta5d6ff"low"Tb4b4b4:
Tff7b72if Te6edf3nTb4b4b4.Te6edf3ID Tff7b72== Ta5d6ff"me" Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3Size Tb4b4b4= Tff7b72&Te6edf3size15
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3Size Tb4b4b4= Tff7b72&Te6edf3size10
Tb4b4b4}
Te6edf3uTb4b4b4.Te6edf3Shape Tb4b4b4= Ta5d6ff"dot"
Te6edf3uTb4b4b4.Te6edf3Font Tb4b4b4= Te6edf3fontSize0
Tff7b72if Te6edf3nTb4b4b4.Te6edf3Group Tff7b72== Ta5d6ff"interface" Tff7b72&& Te6edf3nTb4b4b4.Te6edf3Color Tff7b72!= Tff7b72nil Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3Color Tb4b4b4= Te6edf3nTb4b4b4.Te6edf3Color
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3Color Tb4b4b4= Te6edf3blue
Tb4b4b4}
Tff7b72case Ta5d6ff"medium"Tb4b4b4:
Te6edf3shape Tff7b72:= Te6edf3nTb4b4b4.Te6edf3OriginalShape
Tff7b72if Te6edf3shape Tff7b72== Ta5d6ff"" Tb4b4b4{
Te6edf3shape Tb4b4b4= Ta5d6ff"circularImage"
Tb4b4b4}
Te6edf3uTb4b4b4.Te6edf3Shape Tb4b4b4= Te6edf3shape
Te6edf3uTb4b4b4.Te6edf3Size Tb4b4b4= Te6edf3originalSizePtrTb4b4b4(Te6edf3nTb4b4b4)
Te6edf3uTb4b4b4.Te6edf3Font Tb4b4b4= Te6edf3fontSize0
Tff7b72defaultTb4b4b4:
Te6edf3shape Tff7b72:= Te6edf3nTb4b4b4.Te6edf3OriginalShape
Tff7b72if Te6edf3shape Tff7b72== Ta5d6ff"" Tb4b4b4{
Te6edf3shape Tb4b4b4= Ta5d6ff"circularImage"
Tb4b4b4}
Te6edf3uTb4b4b4.Te6edf3Shape Tb4b4b4= Te6edf3shape
Te6edf3uTb4b4b4.Te6edf3Size Tb4b4b4= Te6edf3originalSizePtrTb4b4b4(Te6edf3nTb4b4b4)
Tff7b72if Te6edf3nTb4b4b4.Te6edf3ID Tff7b72== Ta5d6ff"me" Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3Font Tb4b4b4= Te6edf3fontMe
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3uTb4b4b4.Te6edf3Font Tb4b4b4= Te6edf3fontPeer
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3u
Tb4b4b4}

Tff7b72func Te6edf3originalSizePtrTb4b4b4(Te6edf3n Tff7b72*Te6edf3NodeInTb4b4b4) Tff7b72*Tffa657float64 Tb4b4b4{
Tff7b72if Te6edf3nTb4b4b4.Te6edf3OriginalSize Tff7b72!= T79c0ff0 Tb4b4b4{
T8b949e// Return a pointer into a stable set of common sizes when possible.
Tff7b72switch Te6edf3nTb4b4b4.Te6edf3OriginalSize Tb4b4b4{
Tff7b72case T79c0ff10Tb4b4b4:
Tff7b72return Tff7b72&Te6edf3size10
Tff7b72case T79c0ff15Tb4b4b4:
Tff7b72return Tff7b72&Te6edf3size15
Tff7b72case T79c0ff25Tb4b4b4:
Tff7b72return Tff7b72&Te6edf3size25
Tff7b72case T79c0ff50Tb4b4b4:
Tff7b72return Tff7b72&Te6edf3size50
Tb4b4b4}
Te6edf3v Tff7b72:= Te6edf3nTb4b4b4.Te6edf3OriginalSize
Tff7b72return Tff7b72&Te6edf3v
Tb4b4b4}
Tff7b72if Te6edf3nTb4b4b4.Te6edf3ID Tff7b72== Ta5d6ff"me" Tb4b4b4{
Tff7b72return Tff7b72&Te6edf3size50
Tb4b4b4}
Tff7b72return Tff7b72&Te6edf3size25
Tb4b4b4}

Tff7b72func Te6edf3changedTb4b4b4(Te6edf3n Tff7b72*Te6edf3NodeInTb4b4b4, Te6edf3next Te6edf3UpdateTb4b4b4) Tffa657bool Tb4b4b4{
Tff7b72if Te6edf3nextTb4b4b4.Te6edf3Shape Tff7b72!= Ta5d6ff"" Tff7b72&& Te6edf3nextTb4b4b4.Te6edf3Shape Tff7b72!= Te6edf3nTb4b4b4.Te6edf3Shape Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72if Te6edf3nextTb4b4b4.Te6edf3Size Tff7b72!= Tff7b72nil Tff7b72&& Tff7b72*Te6edf3nextTb4b4b4.Te6edf3Size Tff7b72!= Te6edf3nTb4b4b4.Te6edf3Size Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72if Te6edf3nextTb4b4b4.Te6edf3Font Tff7b72!= Tff7b72nil Tb4b4b4{
Te6edf3nsTb4b4b4, Te6edf3ok Tff7b72:= Te6edf3nextTb4b4b4.Te6edf3FontTb4b4b4[Ta5d6ff"size"Tb4b4b4]
Tff7b72if Te6edf3ok Tb4b4b4{
Tff7b72var Te6edf3cur Tffa657float64
Tff7b72if Te6edf3nTb4b4b4.Te6edf3Font Tff7b72!= Tff7b72nil Tff7b72&& Te6edf3nTb4b4b4.Te6edf3FontTb4b4b4.Te6edf3Size Tff7b72!= Tff7b72nil Tb4b4b4{
Te6edf3cur Tb4b4b4= Tff7b72*Te6edf3nTb4b4b4.Te6edf3FontTb4b4b4.Te6edf3Size
Tb4b4b4}
Tff7b72switch Te6edf3v Tff7b72:= Te6edf3nsTb4b4b4.Tb4b4b4(Tff7b72typeTb4b4b4) Tb4b4b4{
Tff7b72case Tffa657float64Tb4b4b4:
Tff7b72if Te6edf3v Tff7b72!= Te6edf3cur Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72case Tffa657intTb4b4b4:
Tff7b72if Tffa657float64Tb4b4b4(Te6edf3vTb4b4b4) Tff7b72!= Te6edf3cur Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72false
Tb4b4b4}

Tff7b72func Te6edf3nodeColorTb4b4b4(Te6edf3borderTb4b4b4, Te6edf3background Tffa657stringTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Tff7b72return Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{
Ta5d6ff"border"Tb4b4b4: Te6edf3borderTb4b4b4,
Ta5d6ff"background"Tb4b4b4: Te6edf3backgroundTb4b4b4,
Ta5d6ff"highlight"Tb4b4b4: Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{
Ta5d6ff"border"Tb4b4b4: Te6edf3borderTb4b4b4,
Ta5d6ff"background"Tb4b4b4: Te6edf3backgroundTb4b4b4,
Tb4b4b4}Tb4b4b4,
Ta5d6ff"hover"Tb4b4b4: Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{
Ta5d6ff"border"Tb4b4b4: Te6edf3borderTb4b4b4,
Ta5d6ff"background"Tb4b4b4: Te6edf3backgroundTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────